package com.gary.domain;


import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * 将配置文件中的属性映射到组件中
 * @ConfigurationProperties 一个注解 直接从配置文件中读取数据 1批量注入 2支持松散绑定 3不支持SPEL表达式 4支持JSR303数据校验 5支持复杂类型封装
 *                          默认从全局配置文件中读取
 * @Value 1一个个指定 2不支持松散绑定 3支持SPEL表达式 4不支持JSR303数据校验 5不支持复杂类型封装
 *
 * @PropertySource 加载制定的配置文件
 */
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
    /**
     * 注意 使用了value指定配置文件中某个字段 则配置文件中必须有这个字段 否则会跑出非法参数异常，
     *原因是bean工厂在创建时自动注入阶段需要从配置文件中读取数据，而实际上找不到数据
     */
    @Value("${person.name}")
    private String name;
    @Value("#{11*2}")
    private Integer age;
    @Value("true")
    private Boolean boss;

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", boss=" + boss +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Boolean getBoss() {
        return boss;
    }

    public void setBoss(Boolean boss) {
        this.boss = boss;
    }
}
